iOS 逆向<7>:Theos的安装及Tweak项目介绍

名词介绍

1. Tweak

iOS越狱开发中,各种破解补丁的统称为Tweak,通常意义上我们说的越狱开发,都是指开发一个Tweak.
基本上,tweak都依赖于一个名叫cydia Substrate的动态库,作者是Jay Freeman (@saurik),它的主要功能是hook某个App,修改代码比如替换其中方法的实现,Cydia上的tweak都是基于cydia Substrate实现的。

Tweak的本质:

tweak的实质就是iOS平台的动态库。iOS平台上有两种形势的动态库,dylib与framework。Framework这种开发者用的比较多,而dylib这种就相对比较少一点,比如libsqlite.dylib,libz.dylib等。而tweak用的正是dylib这种形势的动态库。我们可以在设备的/Library/MobileSubstrate/DynamicLibraries目录下查看手机上存在着的所有tweak。这个目录下除dylib外还存在着plist与bundle两种格式的文件,plist文件是用来标识该tweak的作用范围,而bundle是tweak所用到的资源文件。

1. Theos

Theos是一个越狱开发工具包,,它给我们准备好了一些代码模板、预置一些基本的Makefile脚本。Theos是越狱开发工具的首先,因为其最大的特点就是简单。大道至简,Theos的下载安装、编译发布都比较简单,让开发者把精力放到开发上去。

而Tweak是Theos的一个功能模块。

提到Theos还要提到iOSOpenDev,这是另一个开发工具,整合到Xcode里了,使用起来没有Theos方便,这里不做过多介绍。

Theos Gihub地址

一:安装ldid

使用brew签名工具:ldid

brew install ldid

ldid是用来签名iOS可执行文件的,可以在越狱iOS中取代Xcode自带的codesign

二、修改环境变量

编辑用户的配置文件

vim ~/.bash_profile 

.bash_profile追加下面两行

export THEOS=~/theos
export PATH=$THEOS/bin:$PATH

让刚修改的.bash_profile,生效

source ~/.bash_profile

三、下载theos

git clone --recursive https://github.com/theos/theos.git $THEOS

四、新建tweak项目

在工程目录执行nic.pl

nic.pl

选择13, 这里的选择数字不一定,theos目前有人在维护,会增加一些新功能,数字不是唯一,我们看清楚是iphone/tweak即可

下面说一些选项的填写:

Package Name [com.yourcompany.13]:

项目名称,和Bundle Identifier类似,一般为到域名,但和不要和宿主APP一样就好,如我们Hook腾讯视频APP(com.tencent.live4iphone):com.live4iphone.tweak

Author/Maintainer Name [mac]:

随便写,可以不填,直接回车

[iphone/tweak] MobileSubstrate Bundle filter [com.apple.springboard]:

这个是宿主APP的Bundle Identifier,不要写错。可以通过Cycript查看(怎么通过Cycript查看,可以参考文章:iOS-逆向<3>-砸壳.md,里面有介绍)。com.tencent.live4iphone

[iphone/tweak] List of applications to terminate upon installation (space-separated, '-' for none) [SpringBoard]:

直接回车即可。

至此填写完毕,输出与打印如下图所示:

五、编写Tweak

一个分为两步,

5.1 填写Makefile

在上边填写通过哪个IP地址和端口连接手机

export THEOS_DEVICE_IP=10.105.12.136
export THEOS_DEVICE_PORT=22

填写完毕,如下所示

export THEOS_DEVICE_IP=10.105.12.136
export THEOS_DEVICE_PORT=22

include $(THEOS)/makefiles/common.mk

TWEAK_NAME = souhutweak
souhutweak_FILES = Tweak.xm

include $(THEOS_MAKE_PATH)/tweak.mk

after-install::
    install.exec "killall -9 SpringBoard"

其他信息可以先不用动,在我们编写复杂Tweak时会有介绍,这里我们用默认的。

5.2 用Reveal分析界面,找到目标class

打开Tweak.xm后,我们可以看到,有注释会告诉我们怎么填写

%hook 要hook的雷鸣

// Hooking a class method
- (instancetype)initWithFrame:(CGRect)frame {
    return nil;
}

%end

此时我们要借助于Reveal。这里不介绍详细的步骤,具体可参考文章:iOS-逆向<2>-越狱机用 Reveal 调试任意 App 的界面

打开搜狐视频,用Reveal,我们可以看到广告的view是ASAdvertPlayerView

但是可以看到上面的viewcontroller里显示是ASAdvertPlayerViewController_iPhone,也就是ASAdvertPlayerView是显示view,其逻辑是在ASAdvertPlayerViewController_iPhone里,所以我们最好对这两个类都进行hook

类找到了,hook哪个方法呢,这里就用到class-dump,我们可以把都文件导出,分析找到要hook的哪个类。

分析ASAdvertPlayerView就很方便的发现其头文件如下:

但是,分析ASAdvertPlayerViewController_iPhone时发现这个是ASAdvertPlayerViewController的之类,所以为了更为彻底的hook,我们最好是对ASAdvertPlayerViewController的方法进行hook

我们查看ASAdvertPlayerViewController的头文件,可以发现其吃石化方法

5.3 编写Tweak.xm进行Hook

根据上述分析我们编写的hook代码如下:

Tweak.xm的文件内容如下:

%hook ASAdvertPlayerView

// Hooking a class method
- (instancetype)initWithFrame:(CGRect)frame {
    return nil;
}

%end


%hook ASAdvertPlayerViewController

// Hooking a class method
- (id)initWithAdvertFrame:(struct CGRect)arg1 delegate:(id)arg2 {
    return nil;
}

%end

编写完成后,我们执行以此make,make package,make install,如果没有错误会有两次提升输入手机root密码,然后重启SpringBoard,就可以安装成功。

安装后我们打开搜狐视频就看到已经没有广告了。

六、Tweak插件的卸载

刚才我们的操作是永久有效的,那么如果我们想删除安装插件该怎么操作呢。

打开Cydia,找到tab:已安装,切换最近选项卡

点击右上角的卸载,即可卸载插件

您的支持将鼓励我继续创作!